package com.py.credit.clean.code;

import org.apache.commons.lang3.StringUtils;

public class GszchCheck {
	
	/**
	 * 工商注册号校验（空则不校验）
	 * 
	 * 	15位的数字字符串，前6位为登记机关的行政区划代码（划分到县级局），第7到第14位数为顺序码，第15位为校验码（根据前14位数自动生成）
		
	 */
	public boolean run(String data, String extend){
		if(StringUtils.isEmpty(data)){
			return true;
		}
		
		try {
			return checkCode(data);
		}catch(Exception e){
			return false;
		}
	}
	
	private boolean checkCode(String data){
		int length = data.length();
		if(length == 15){
			String businesslicensePrex14 = data.substring(0,14);// 获取营业执照注册号前14位数字用来计算校验码
	        String businesslicense15 = data.substring(14,data.length());// 获取营业执照号的校验码
	        char[] chars = businesslicensePrex14.toCharArray();
	        int[] ints = new int[chars.length];
	        for(int i=0; i<chars.length;i++){
	            ints[i] = Integer.parseInt(String.valueOf(chars[i]));
	        }
	        if(businesslicense15.equals(getCheckCode(ints)+"")){// 比较 填写的营业执照注册号的校验码和计算的校验码是否一致
	            return  true;
	        }
			
		}
		return false;
	}
	
	private int getCheckCode(int[] ints){
        if (null != ints && ints.length > 1) {
            int ti = 0;
            int si = 0;// pi|11+ti
            int cj = 0;// （si||10==0？10：si||10）*2
            int pj = 10;// pj=cj|11==0?10:cj|11
            for (int i=0;i<ints.length;i++) {
                ti = ints[i];
                pj = (cj % 11) == 0 ? 10 : (cj % 11);
                si = pj + ti;
                cj = (0 == si % 10 ? 10 : si % 10) * 2;
                if (i == ints.length-1) {
                    pj = (cj % 11) == 0 ? 10 : (cj % 11);
                    return pj == 1 ? 0 : 11 - pj;
                }
                //cj = (0 == si % 10 ? 10 : si % 10) * 2;
            }
        }
        return -1;
    }

/*	public static void main(String[] args) {
		String data = "110000410233252";
		
		GszchCheck check = new GszchCheck();
		System.out.println(check.run(data, ""));
	}*/

}
